package com.bird.file.bufferstream;

import java.io.*;

/**
 * @author sijunqiang
 * @data 2021/8/1 10:24
 * @description: 缓冲流--
 */
public class BufferStream {

//public BufferedInputStream(InputStream in) 创建一个 新的缓冲输入流。
//将普通的字节输入流包装为一个高效字节的输入流
//public BufferedOutputStream(OutputStream out)	创建一个新的缓冲输出流。
//将普通的字节输出流包装为一个高效的字节输出流

//BufferedInputStream中常用的方法
//public int read(): 读取一个字节返回值获取，当读完时返回-1
//public int read(byte[] bytes):读取多个字节，返回读取有效字节个数，读完时返回-1

////BufferdOutputStream中常用的方法
//public void write(int b): 写入一个字节数据
//public void write(byte[] bytes):将字节数组中的数据写入数
//public void write(byte[] bytes,int off,int len):将bytes数组中从off开始后len个字节写入

    //创建字节缓冲流对象
    public static void main1(String[] args) throws FileNotFoundException {

        // 构建一个字节缓冲输入流对象  将内存数据写入到文件中
        FileInputStream fis = new FileInputStream("c.txt");
        BufferedInputStream bis = new BufferedInputStream(fis);

        //构建一个字节缓冲输出流对象
        FileOutputStream fos = new FileOutputStream("w.txt");
        BufferedOutputStream bos = new BufferedOutputStream(fos);
    }

    //使用字节缓冲流输入和输出数据
    public static void main2(String[] args) throws IOException {

        // 先构建字节缓冲输入流对象
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("w.txt"));

        // 构建字节缓冲输出流
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("z.txt"));

        //开始读写数据
        int len;
        byte[] bytes = new byte[1024];
        while ((len = bis.read(bytes)) != -1) {
            bos.write(bytes, 0, len);
        }
        bos.flush();
        bos.close();
        bis.close();
    }

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//


    //public BufferedReader(Reader in) ：创建一个 新的缓冲输入流。
    //把普通的字符流输入流包装成一个缓冲字符输入流
    //public BufferedWriter(Writer out)： 创建一个新的缓冲输出流。
    //把普通的字符流输出流包装成一个缓冲字符输出流


    //创建字符缓冲流对象
    public static void main3(String[] args) throws IOException {
        // 构建一个字符缓冲读取流对象
        BufferedReader db = new BufferedReader(new FileReader("w.txt"));

        // 创建一个字符缓冲写出流对象
        BufferedWriter bw = new BufferedWriter(new FileWriter("w.txt"));
    }

    //BufferedReader 特有的读行方法：
    //public String readLine(): 读一行文字。

    //BufferedWriter特有的换行：
    // public void newLine(): 写一行行分隔符,由系统属性定义符号。

    // 使用字符流缓冲流读取数据 一行一行的读取
    public static void main4(String[] args) throws IOException {

        //先构建字符缓冲读取流
        BufferedReader br = new BufferedReader(new FileReader("c.txt"));

        // 定义一个字符串 保存读取的一行数据
        String readLine = "";

        //环读取,读取到最后返回null
        while ((readLine = br.readLine()) != null) {
            System.out.println(readLine);
            System.out.println("------");
        }
        // 关闭资源
        br.close();
    }


    // 使用字符缓冲流写出数据
    public static void main5(String[] args) throws IOException {

        //先构建字符缓冲读取流对象
        BufferedReader br = new BufferedReader(new FileReader("c.txt"));

        //再构建字符缓冲写出流对象
        BufferedWriter bw = new BufferedWriter(new BufferedWriter(new FileWriter("m.txt")));

        // 定义一个变量 保存读取的数据
        String line = "";
          // 读一行 写一行
        while ((line = br.readLine()) != null) {
            System.out.println(line);
            bw.write(line);
            bw.newLine();
        }

        bw.flush();
        bw.close();
        br.close();


    }


}
